#!/usr/bin/env python3

# Copyright (c) 2020-2021 Fpemud <fpemud@sina.com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.


from .._const import Version
from .._errors import SettingsError
from .._settings import TargetSettingsBase


class TargetSettings(TargetSettingsBase):

    def __init__(self):
        super().__init__()

        self.user_name = None

        self.timezone = None
        self.keyboard_layout = None
        self.locale = None

        self.extra_drivers = []

    def check(self, raise_exception=None):
        if not super().check(raise_exception):
            return False

        try:
            # check self.version
            if self.version not in [Version.WINDOWS_7]:
                raise SettingsError("invalid value of version")

            # check self.user_name
            if self.user_name is None:
                raise SettingsError("invalid value of user name")

            # check self.timezone
            # if self.timezone is None or self.timezone not in spec.getTimeZoneList():
            if self.timezone is None:
                raise SettingsError("invalid value of timezone")

            # check self.keyboard_layout
            # if self.keyboard_layout is None or self.keyboard_layout not in spec.getKeyboardLayoutList():
            if self.keyboard_layout is None:
                raise SettingsError("invalid value of keyboard layout")

            # check self.locale
            # if self.locale is None or self.locale not in spec.getLocaleList():
            if self.locale is None:
                raise SettingsError("invalid value of locale")

        except SettingsError:
            if raise_exception:
                raise
            else:
                return False

        return True


# https://www.itsupportguides.com/knowledge-base/windows-7/time-zone-value-for-windows-7-deployment

# 000
# Dateline Standard Time
# (GMT-12:00) International Date Line West

# 001
# Samoa Standard Time
# (GMT-11:00) Midway Island, Samoa

# 002
# Hawaiian Standard Time
# (GMT-10:00) Hawaii

# 003
# Alaskan Standard Time
# (GMT-09:00) Alaska

# 004
# Pacific Standard Time
# (GMT-08:00) Pacific Time (US and Canada); Tijuana

# 010
# Mountain Standard Time
# (GMT-07:00) Mountain Time (US and Canada)

# 013
# Mexico Standard Time 2
# (GMT-07:00) Chihuahua, La Paz, Mazatlan

# 015
# U.S. Mountain Standard Time
# (GMT-07:00) Arizona

# 020
# Central Standard Time
# (GMT-06:00) Central Time (US and Canada)

# 025
# Canada Central Standard Time
# (GMT-06:00) Saskatchewan

# 030
# Mexico Standard Time
# (GMT-06:00) Guadalajara, Mexico City, Monterrey

# 033
# Central America Standard Time
# (GMT-06:00) Central America

# 035
# Eastern Standard Time
# (GMT-05:00) Eastern Time (US and Canada)

# 040
# U.S. Eastern Standard Time
# (GMT-05:00) Indiana (East)

# 045
# S.A. Pacific Standard Time
# (GMT-05:00) Bogota, Lima, Quito

# 050
# Atlantic Standard Time
# (GMT-04:00) Atlantic Time (Canada)

# 055
# S.A. Western Standard Time
# (GMT-04:00) Caracas, La Paz

# 056
# Pacific S.A. Standard Time
# (GMT-04:00) Santiago

# 060
# Newfoundland and Labrador Standard Time
# (GMT-03:30) Newfoundland and Labrador

# 065
# E. South America Standard Time
# (GMT-03:00) Brasilia

# 070
# S.A. Eastern Standard Time
# (GMT-03:00) Buenos Aires, Georgetown

# 073
# Greenland Standard Time
# (GMT-03:00) Greenland

# 075
# Mid-Atlantic Standard Time
# (GMT-02:00) Mid-Atlantic

# 080
# Azores Standard Time
# (GMT-01:00) Azores

# 083
# Cape Verde Standard Time
# (GMT-01:00) Cape Verde Islands

# 085
# GMT Standard Time
# (GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London

# 090
# Greenwich Standard Time
# (GMT) Casablanca, Monrovia

# 095
# Central Europe Standard Time
# (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague

# 100
# Central European Standard Time
# (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb

# 105
# Romance Standard Time
# (GMT+01:00) Brussels, Copenhagen, Madrid, Paris

# 110
# W. Europe Standard Time
# (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna

# 113
# W. Central Africa Standard Time
# (GMT+01:00) West Central Africa

# 115
# E. Europe Standard Time
# (GMT+02:00) Bucharest

# 120
# Egypt Standard Time
# (GMT+02:00) Cairo

# 125
# FLE Standard Time
# (GMT+02:00) Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius

# 130
# GTB Standard Time
# (GMT+02:00) Athens, Istanbul, Minsk

# 135
# Israel Standard Time
# (GMT+02:00) Jerusalem

# 140
# South Africa Standard Time
# (GMT+02:00) Harare, Pretoria

# 145
# Russian Standard Time
# (GMT+03:00) Moscow, St. Petersburg, Volgograd

# 150
# Arab Standard Time
# (GMT+03:00) Kuwait, Riyadh

# 155
# E. Africa Standard Time
# (GMT+03:00) Nairobi

# 158
# Arabic Standard Time
# (GMT+03:00) Baghdad

# 160
# Iran Standard Time
# (GMT+03:30) Tehran

# 165
# Arabian Standard Time
# (GMT+04:00) Abu Dhabi, Muscat

# 170
# Caucasus Standard Time
# (GMT+04:00) Baku, Tbilisi, Yerevan

# 175
# Transitional Islamic State of Afghanistan Standard Time
# (GMT+04:30) Kabul

# 180
# Ekaterinburg Standard Time
# (GMT+05:00) Ekaterinburg

# 185
# West Asia Standard Time
# (GMT+05:00) Islamabad, Karachi, Tashkent

# 190
# India Standard Time
# (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi

# 193
# Nepal Standard Time
# (GMT+05:45) Kathmandu

# 195
# Central Asia Standard Time
# (GMT+06:00) Astana, Dhaka

# 200
# Sri Lanka Standard Time
# (GMT+06:00) Sri Jayawardenepura

# 201
# N. Central Asia Standard Time
# (GMT+06:00) Almaty, Novosibirsk

# 203
# Myanmar Standard Time
# (GMT+06:30) Yangon (Rangoon)

# 205
# S.E. Asia Standard Time
# (GMT+07:00) Bangkok, Hanoi, Jakarta

# 207
# North Asia Standard Time
# (GMT+07:00) Krasnoyarsk

# 210
# China Standard Time
# (GMT+08:00) Beijing, Chongqing, Hong Kong SAR, Urumqi

# 215
# Singapore Standard Time
# (GMT+08:00) Kuala Lumpur, Singapore

# 220
# Taipei Standard Time
# (GMT+08:00) Taipei

# 225
# W. Australia Standard Time
# (GMT+08:00) Perth

# 227
# North Asia East Standard Time
# (GMT+08:00) Irkutsk, Ulaanbaatar

# 230
# Korea Standard Time
# (GMT+09:00) Seoul

# 235
# Tokyo Standard Time
# (GMT+09:00) Osaka, Sapporo, Tokyo

# 240
# Yakutsk Standard Time
# (GMT+09:00) Yakutsk

# 245
# A.U.S. Central Standard Time
# (GMT+09:30) Darwin

# 250
# Cen. Australia Standard Time
# (GMT+09:30) Adelaide

# 255
# A.U.S. Eastern Standard Time
# (GMT+10:00) Canberra, Melbourne, Sydney

# 260
# E. Australia Standard Time
# (GMT+10:00) Brisbane

# 265
# Tasmania Standard Time
# (GMT+10:00) Hobart

# 270
# Vladivostok Standard Time
# (GMT+10:00) Vladivostok

# 275
# West Pacific Standard Time
# (GMT+10:00) Guam, Port Moresby

# 280
# Central Pacific Standard Time
# (GMT+11:00) Magadan, Solomon Islands, New Caledonia

# 285
# Fiji Islands Standard Time
# (GMT+12:00) Fiji Islands, Kamchatka, Marshall Islands

# 290
# New Zealand Standard Time
# (GMT+12:00) Auckland, Wellington

# 300
# Tonga Standard Time
# (GMT+13:00) Nuku'alofa


# http://docs.microsoft.com/en-us/windows-hardware/customize/desktop/unattend
